package org.infodavid.common.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * The Interface AImplementation.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
@SuppressWarnings("rawtypes")
public @interface AImplementation {
	/**
	 * The Enum OverridingMode.
	 */
	public enum ERuntime {
		/**
		 * The DEFAULT, the implementations is used on normal runtime and in test environment if no
		 * implementation is specified for testing.
		 */
		DEFAULT,
		/**
		 * The TEST, the implementations is used only for testing.
		 */
		TEST
	}

	/**
	 * The class name of the super class or interface.
	 * @return the class
	 */
	Class value();

	/**
	 * The runtime mode.
	 * @return the runtime mode
	 */
	ERuntime runtime() default ERuntime.DEFAULT;
}
